<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US"> 
  <head profile="http://gmpg.org/xfn/11"> 
    <link href="http://fonts.googleapis.com/css?family=Lato" rel="stylesheet" type="text/css">

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    
    
    <link rel="stylesheet" href="bootstrap.css">
    <link rel="stylesheet" href="main.css">

    <title>JQuery EasyTabs Demo &#8211; Side Tabs &#45; Alfa Jango Blog</title> 
    
        
  <!-- Minified Bootstrap JavaScript -->
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
  <script src="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>

  <!-- These need to go after the bootrstrap js scripts -->
  <script src="./js/jquery-1.4.4.min.js" type="text/javascript"></script> 
  <script src="./js/jquery.easytabs.min.js" type="text/javascript"></script>
  <script src="./js/custom.js" type="text/javascript"></script>
        
    
    
  </head>
  <body bgcolor="#0000FF">
    <div id="tab-container">
      <ul>
	<img src="./img/me.jpg"; class="circImgLarge">
	<h2>Ben Marks</h2>
	<tagline>I like building / tweaking things and helping people.</tagline>
	<li id="start"><a href="#about">About Me</a></li>
	<li><a href="#work">The Second Tab</a></li>
	<li><a href="#jobs">Tab C</a></li>
	<br style="clear:both;" />
      </ul>
      <div class="panel-container">
	<div id="about">
	  
	  <p>Hi! My name is Ben Marks, and I'm a student at Swarthmore
	  College - a small liberal arts school about 20 minutes from
	  Philadelphia. At the moment, I'm on track to complete a
	  major in Compute Science and a minor in Statistics. My main
	  interests are in computer systems, distributed systems, and
	  networks.</p>

	  <p>On campus, I'm part of the Swarthmore College Computer Society and
	  tutor for the CS department. Outside of CS, I enjoy playing trumpet in
	  the Wind Ensemble, working as a Student Academic Mentor, and taking
	  part in Swarthmore's Learning For Life program. In my free time, you
	  can find me cooking, biking, or working on something CS.</p>
	  
	  <p>Feel free to check out some of my work on the "Experiences"
	  and "Just For Fun" pages.</p>

	</div>
	

	<div id="work">

	  <div class="panel-group" id="accordion">
	    <div class="panel panel-default">
	      <div class="panel-heading">
		<h4 class="panel-title">
		  <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
		    Linux Kernel Level Programming 
		  </a>
		</h4>
	      </div>
	      <div id="collapseOne" class="panel-collapse collapse in">
		<div class="panel-body">

		  As part of the Operating Systems course at Swarthmore, 
		  I worked with a partner to modify and add features to the
		  Linux 2.6 Kernel.

		  Together, we implemented an Event synchronization
		  primative. This allows multipe processes to open and
		  wait on a single ``event.''  Subsequently, another
		  process can open and signal the event, notifying all
		  processes that were previously waiting that the
		  event had occured. This functionality is similar to
		  the Python threading Event synchronization
		  primative. This synchronization primative could be
		  useful in many multiprogramming environments and has
		  a slightly higher level of abstraction than
		  semaphores or condition variables.

		  Another Linux addition was the creation of a
		  Loadable Kernel Module implementing a mailbox device
		  similar to a Unix named pipe. Processes can either
		  read from or write to a mailbox, blocking
		  appropriately if the mailbox is empty or full. Data
		  in the mailbox persist past the life of a single
		  reader or writer. Such a communication mechanism
		  would be useful for exchanging data between two
		  processes when a hierarchical relationship may not
		  exist or when processes are specifically readers or
		  writers.

		</div>
	      </div>
	    </div>
	    <div class="panel panel-default">
	      <div class="panel-heading">
		<h4 class="panel-title">
		  <a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">
		    
		    Implementing TCP
		  </a>
		</h4>
	      </div>
	      <div id="collapseTwo" class="panel-collapse collapse">
		<div class="panel-body">
		 
		  In Computer Networks, I had the chance to implement
		  a stripped down version of TCP. My implementation
		  provided reliable transit, flow control, and
		  congestion control over a lossy network, along with
		  smooth connection setup and teardown. In order to
		  maximize transfer speeds, my implementation used the
		  exponentially weighted moving average to estimate
		  the round-trip time of a packet.

		  This assignment was fascinating. I enjoyed ``pulling
		  back the curtain'' on TCP and seeing how some of the
		  features of reliable transit used constantly could
		  be implemented. Simple concepts, like
		  acknowledgements, sequence numbers, and timeouts
		  combined to create a powerful, useful service of
		  reliability.

		  

		</div>
	      </div>
	    </div>
	    <div class="panel panel-default">
	      <div class="panel-heading">
		<h4 class="panel-title">
		  <a data-toggle="collapse" data-parent="#accordion" href="#collapseThree">
		    Cracking Windows Games
		  </a>
		</h4>
	      </div>
	      <div id="collapseThree" class="panel-collapse collapse">
		<div class="panel-body">
		  
		  ''Assembly code (usually) tells no lies.''

		  As a CS Ninja (TA) for the computer systems class, I
		  gained some exposure to x86 assembly code. One of my
		  favorite assignments, the CMU Binary Bomb, involved
		  reverse engineering a binary to determine the
		  expected string inputs. Reverse correctly, and you
		  move on to the next phase of the program; make a
		  mistake, and the binary bomb explodes.

		  I decided to take the reverse engineering experience
		  to a different sort of application: reversing
		  Windows games. Using IDA, OllyDbg, and Hexplorer, I
		  examined Windows Minesweeper and patched it to make
		  my own version. Frustrated with the mines? Click
		  ``Help > About Minesweeper'' to get a nice hint
		  about where they might be. I also examined Microsoft
		  Hearts, and wrote a program to allow users to
		  cheat. Want to see the cards in your opponent's
		  hands? No problem. Want to see the cards they will
		  pass to you? Sure. Shooting the moon just got a lot
		  easier.


		</div>
	      </div>
	    </div>
	  </div> <!-- Panel Group for Accordion -->


Malloc Lab

	  Implementing a dynamic memory allocator is a standard
	  assignment at many schools, although it's not assigned in
	  the Computer Systems course at Swarthmore. As a Ninja for
	  the course, I decided it might be a fun opportunity to hone
	  my C skills.

	  My implementation uses explicit segregated free lists in
	  powers of two. I found that choosing the first block within
	  a list that would fit provided an acceptable balance between
	  space utilization and throughput. Further, I chose to
	  allocate space from the end of a free block, which greatly
	  improved performance with repeated calls to realloc. I use
	  coalescing when freeing blocks to reduce external
	  fragmentaiton. While I wasn't submitting this assignment for
	  a grade, I'm pleased that my implementation scores 56/60 on
	  utilization and 40/40 on throughput on the CMU driver
	  program.


C Library

	  When writing C code, I find myself using certain functions,
	  such as a wrapper for malloc, frequently. I decided to start
	  integrating commonly used functions into a library that I
	  could then statically link at compile time. At the moment,
	  my library includes functions for reading in user input,
	  mainpulating strings, timing function calls, generating
	  random numbers, and calling malloc. I also have a Makefile
	  that compiles all the library files into a single
	  library. The Makefile uses wildcards and filters to
	  incorporate new library modules into the library without
	  modifying the Makefile.

	  Feel free to use this library, and let me know if you find
	  anything that doesn't work well. At the moment, I am aware
	  of an issue with EOF in the user input library.


Linguistics Program

	  Introduction to Linguistics exposed me to sociolinguistics -
	  the study of the interaction between language and society -
	  for the first time. Our final project was to use a corpus
	  containing the experiences of ~30 bilinguals to comment on
	  and analyze the bilingual experience.

	  I proposed an alternative project based on computer
	  programming: writing a framework to compare similarity
	  between two stories in the bilingual corpus. Such a
	  framework could be useful in determining which experiences
	  are common to bilinguals or which components of the
	  bilingual experience may be correlated. 

	  Under the supervision of Brook Lillehaugen, I developed
	  criteria for characterizing a bilingual experience and
	  implemented a program to interface with and analyze a set of
	  characterized stories. Given a characterized corpus, my
	  program allows a user to filter stories by certain criteria,
	  see the commonalities between two stories, or determine the
	  similarity of one story to all other stories in the corpus.

	  


Ramah Darom Package Sorter

	  The summer after high school, I worked at Camp Ramah Darom
	  as the technology coordinator. When I had time outside of
	  this, I worked in the mail room. On any given day, we
	  received up to 200 packages, which all needed to be sorted
	  and logged. The process took 5 people 1-2 hours. 

	  The following summer, with a little bit of CS experience, I
	  decided to see if I could write a program that would make
	  the process a bit less painful. I wrote a macro-driven form
	  in Excel that took in information about each package and
	  logged it in a daily database. As an added bonus, the
	  spreadsheet stored prior package senders, so any particular
	  address only needed to be typed in once per summer. Once all
	  packages had been logged, the daily database was sorted by
	  bunk and printed.

	  The Excel program saved a lot of time. In particular, it
	  omitted one time-intensive step from the package process:
	  sorting packages by bunk. When logging packages by hand, it
	  made sense to sort packages first and then log each bunk as
	  a group. However, since Excel could sort the packages at the
	  end of the process, the initial sorting process was no
	  longer needed. The end result: a streamlined and efficient
	  package logging solution that was easier and faster.


Add SCCS to the jobs. 

	</div>
	
	<div id="jobs">
	  <h3>I've been fortunate to have experiences to apply what I
	  know, learn new material, and collaborate with others.</h3>


	  <div class="panel-group" id="accordion">
	    <div class="panel panel-default">
	      <div class="panel-heading">
		<h4 class="panel-title">
		  <a data-toggle="collapse" data-parent="#accordion" 
		     href="#WcollapseOne">
		    Student Academic Mentor 
		  </a>
		</h4>
	      </div>
	      <div id="WcollapseOne" class="panel-collapse collapse in">
		<div class="panel-body">
		  This coming year, I will be a Student Academic
		  Mentor (SAM) at Swarthmore College. As a SAM, I'll
		  be a resource for residents in my dorm with regard
		  to academic skills and support, holding office hours
		  and serving as a guide to the myriad campus
		  resources. I'm excited to work with my peers and
		  help them make the most of their college academic
		  experiences.
		</div>
	      </div>
	    </div>

	    


	    <div class="panel panel-default">
	      <div class="panel-heading">
		<h4 class="panel-title">
		  <a data-toggle="collapse" data-parent="#accordion" 
		     href="#WcollapseTwo">
		    Intern at National Institute for 
		    Standards and Technology (NIST)
		  </a>
		</h4>
	      </div>
	      <div id="WcollapseTwo" class="panel-collapse collapse">
		<div class="panel-body">
		  In January 2014, I had the opportunity to work with
		  Tom Kramer at the National Institute for Standards
		  and Technology (NIST). While there, I contributed to
		  ''Software Tools for XML to OWL Translation'', a
		  paper summarizing a set of tools developed at NIST
		  for efficiently converting XML instances and XSD
		  Schemas to OWL (Web Ontology Language) classes. I
		  evaluated the complexity of the implemented tools
		  and contrasted them with existing conversion
		  utilities.

		  The process to publish this paper is ongoing. 
		</div>
	      </div>
	    </div>


	    <div class="panel panel-default">
	      <div class="panel-heading">
		<h4 class="panel-title">
		  <a data-toggle="collapse" data-parent="#accordion" 
		     href="#WcollapseThree">
		    CS Department Student Mentor
		  </a>
		</h4>
	      </div>
	      <div id="WcollapseThree" class="panel-collapse collapse">
		<div class="panel-body">
		  My sophomore year, I worked for the Computer Science
		  Department as a Ninja (Student Mentor / TA) for the
		  Introductory Computer Systems course. I mentored ~35
		  students each semester through weekly help sessions
		  and assistance in lab sections. The position also
		  involved weekly pedagogical meetings focused on
		  effective ways to help enrolled students develop
		  problem solving and programming skills.
		</div>
	      </div>
	    </div>


	    <div class="panel panel-default">
	      <div class="panel-heading">
		<h4 class="panel-title">
		  <a data-toggle="collapse" data-parent="#accordion" 
		     href="#WcollapseFour">
		    Collapsible Group Item #3
		  </a>
		</h4>
	      </div>
	      <div id="WcollapseFour" class="panel-collapse collapse">
		<div class="panel-body">
		  

		</div>
	      </div>
	    </div>
	  </div> <!-- Panel Group for Accordion -->
	  



	</div>
      </div>
    </div>

  

  </body>
</html>
